home *** CD-ROM | disk | FTP | other *** search
/ Precision Software Appli…tions Silver Collection 4 / Precision Software Applications Silver Collection Volume 4 (1993).iso / new / exec33a.arj / EXTEST.C < prev    next >
C/C++ Source or Header  |  1991-11-26  |  5KB  |  194 lines

  1. /*
  2.    --- Version 3.3 91-11-26 15:54 ---
  3.  
  4.    EXTEST.C: EXEC function with memory swap - Test program.
  5.  
  6.    Public domain software by
  7.  
  8.         Thomas Wagner
  9.         Ferrari electronic GmbH
  10.         Beusselstrasse 27
  11.         D-1000 Berlin 21
  12.         Germany
  13. */
  14.  
  15.  
  16. #include "compat.h"
  17. #include "exec.h"
  18.  
  19. /*>e*/
  20. #define ENGLISH 1
  21. /*<*/
  22.  
  23. #ifdef ENGLISH
  24. int help (void)
  25. {
  26.    puts ("Usage: EXTEST [options]");
  27.    puts ("Options:");
  28.    puts ("     -E    do not use EMS  for swapping");
  29.    puts ("     -X    do not use XMS  for swapping");
  30.    puts ("     -F    do not use File for swapping");
  31.    puts ("     -T    Terminate after EXEC (no swap)");
  32.    puts ("     -N    do Not swap");
  33.    puts ("     -C    do not Copy environment");
  34.    puts ("     -H    Hide swapfile");
  35.    puts ("     -Z    Try XMS first, then EMS");
  36.  
  37.    return 1;
  38. }
  39. #else
  40. int help (void)
  41. {
  42.    puts ("Benutzung: EXTEST [Optionen]");
  43.    puts ("Optionen:");
  44.    puts ("     -E    bei Auslagern kein EMS benutzen");
  45.    puts ("     -X    bei Auslagern kein XMS benutzen");
  46.    puts ("     -F    bei Auslagern keine Datei benutzen");
  47.    puts ("     -T    Terminieren nach EXEC (keine Auslagerung)");
  48.    puts ("     -N    Nicht Auslagern");
  49.    puts ("     -C    Umgebungsvariablen nicht kopieren");
  50.    puts ("     -H    Auslagerungsdatei 'hidden'");
  51.    puts ("     -Z    Zuerst XMS versuchen, dann EMS");
  52.  
  53.    return 1;
  54. }
  55. #endif
  56.  
  57. #ifdef ENGLISH
  58. int spcheck (int cmdbat, int swapping, char *execfn, char *progpars)
  59. {
  60.    if (swapping > 0)
  61.       {
  62.       switch (swap_prep.swapmethod)
  63.          {
  64.          case USE_EMS:
  65.                printf ("Swapping to EMS handle %d\n", swap_prep.handle);
  66.                break;
  67.  
  68.          case USE_XMS:
  69.                printf ("Swapping to XMS handle %d\n", swap_prep.handle);
  70.                break;
  71.  
  72.          case USE_FILE:
  73.                printf ("Swapping to File <%s>\n", swap_prep.swapfilename);
  74.                break;
  75.          }
  76.       }
  77.    printf ("Executing %s %s\n\n", execfn, progpars);
  78.    if (cmdbat == 3 && strstr (progpars, "/c") == NULL)
  79.       puts ("Enter EXIT to return to EXTEST");
  80.  
  81.    return 0;
  82. }
  83. #else
  84. int spcheck (int cmdbat, int swapping, char *execfn, char *progpars)
  85. {
  86.    if (swapping > 0)
  87.       {
  88.       switch (swap_prep.swapmethod)
  89.          {
  90.          case USE_EMS:
  91.                printf ("Auslagerung auf EMS Handle %d\n", swap_prep.handle);
  92.                break;
  93.  
  94.          case USE_XMS:
  95.                printf ("Auslagerung auf XMS Handle %d\n", swap_prep.handle);
  96.                break;
  97.  
  98.          case USE_FILE:
  99.                printf ("Auslagerung auf Datei <%s>\n", swap_prep.swapfilename);
  100.                break;
  101.          }
  102.       }
  103.    printf ("Ausführen %s %s\n\n", execfn, progpars);
  104.    if (cmdbat == 3 && strstr (progpars, "/c") == NULL)
  105.       puts ("Geben Sie EXIT ein um zu EXTEST zurückzukehren");
  106.  
  107.    return 0;
  108. }
  109. #endif
  110.  
  111.  
  112. int main (int argc, char **argv)
  113. {
  114.    static char fn [255], par [130];
  115.    char *com;
  116.    int i;
  117.    char far *x;
  118.    char far *y;
  119.    int method;
  120.    unsigned needed;
  121.    char **env;
  122.    union REGS regs;
  123.  
  124.    method = USE_ALL;
  125.    needed = 0xffff;
  126.    env = environ;
  127.    spawn_check = spcheck;
  128.  
  129.    for (i = 1; i < argc; i++)
  130.       {
  131.       if (argv [i][0] != '-' && argv [i][0] != '/')
  132.          return help ();
  133.       com = &argv [i][1];
  134.       do
  135.          {
  136.          switch (toupper (*com))
  137.             {
  138.             case 'E':   method &= ~USE_EMS; break;
  139.             case 'X':   method &= ~USE_XMS; break;
  140.             case 'F':   method &= ~USE_FILE; break;
  141.             case 'T':   method = 0; break;
  142.             case 'N':   needed = 0; break;
  143.             case 'C':   env = NULL; break;
  144.             case 'H':   method |= HIDE_FILE; break;
  145.             case 'Z':   method |= XMS_FIRST; break;
  146.             case '-':   break;
  147.             case '/':   break;
  148.             default:    return help ();
  149.             }
  150.          com++;
  151.          } while (*com);
  152.       }
  153.  
  154.    x = (char far *)farmalloc (64L * 1024L);
  155.    y = (char far *)farmalloc (64L * 1024L);
  156.  
  157. #ifdef ENGLISH
  158.    putenv ("XYZ=This is an environment string for the spawned process");
  159. #else
  160.    putenv ("XYZ=Dies ist eine Umgebungsvariable für den aufgerufenen Prozeß");
  161. #endif
  162.  
  163.    while (1)
  164.       {
  165. #ifdef ENGLISH
  166.       printf ("\nEXEC filename,params ('.' to exit): ");
  167. #else
  168.       printf ("\nDateiname,Parameter ('.' beendet): ");
  169. #endif
  170.       gets (fn);
  171.  
  172.       if (fn [0] == '.')
  173.          return 0;
  174.  
  175.       com = strchr (fn, ',');
  176.       if (com != NULL)
  177.          {
  178.          strcpy (par, &com [1]);
  179.          *com = 0;
  180.          }
  181.       else
  182.          par [0] = 0;
  183.  
  184.       i = do_exec (fn, par, method, needed, env);
  185.  
  186. #ifdef ENGLISH
  187.       printf ("\nDO_EXEC returns %04x\n", i);
  188. #else
  189.       printf ("\nDO_EXEC liefert %04x\n", i);
  190. #endif
  191.       }
  192. }
  193.  
  194.